package com.common.util;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSON;

import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class FileLoadUtil {

	/**
	 * @param fileClassPath 资源文件classPath路径
	 * @return
	 */
	public static String loadFileAsString(String fileClassPath) {
		URL url=Thread.currentThread().getContextClassLoader().getResource(fileClassPath);
		if(url==null) {
			log.warn("加载资源文件路径"+fileClassPath+"为空!");
			return null;
		}
		String fileString;
		try {
			fileString = IOUtils.toString(url,StandardCharsets.UTF_8);
		} catch (IOException e) {
			e.printStackTrace();
			log.warn("读取资源文件"+fileClassPath+"异常!"+e.getLocalizedMessage());
			return null;
		}
		if(StringUtils.isEmpty(fileString)) {
			log.warn("读取资源文件"+fileClassPath+"为空!");
			return null;
		}
		return fileString;
	}
	
	/**
	 * 加载文件内容
	 * @param filePath
	 * @return
	 */
	public static String loadFilePathAsString(String filePath) {
		File file=new File(filePath);
		if(!file.exists()) {
			log.warn("加载资源文件路径"+filePath+"为空!");
			return null;
		}
		String fileString=FileUtil.readUtf8String(file);
		if(StringUtils.isEmpty(fileString)) {
			log.warn("加载资源文件路径"+filePath+"内容为空!");
			return null;
		}
		return fileString;
	}
	
	/**
	 * @param fileName 文件路径
	 * @param cless
	 * @return
	 */
	public static <T> T buildObjectFromFile(String fileName,Class<T> cless){
		String fileString=loadFilePathAsString(fileName);
		if(StringUtils.isEmpty(fileString)) {
			return null;
		}
		return JSON.parseObject(fileString, cless);
	}
	
	/**
	 * @param fileName 文件路径
	 * @param cless
	 * @return
	 */
	public static <T> List<T> buildListFromFile(String fileName,Class<T> cless){
		List<T> result=new ArrayList<>();
		String fileString=loadFilePathAsString(fileName);
		if(StringUtils.isNotEmpty(fileString)) {
			result=JSON.parseArray(fileString, cless);
		}
		return result;
	}
	
	/**
	 * @param fileClassPath 资源路径
	 * @param cless
	 * @return
	 */
	public static <T> T buildObjectFromResource(String fileClassPath,Class<T> cless){
		String fileString=loadFileAsString(fileClassPath);
		if(StringUtils.isEmpty(fileString)) {
			return null;
		}
		return JSON.parseObject(fileString, cless);
	}
	
	/**
	 * @param fileClassPath 资源路径
	 * @param cless
	 * @return
	 */
	public static <T> List<T> buildListFromResource(String fileClassPath,Class<T> cless){
		List<T> result=new ArrayList<>();
		String fileString=loadFileAsString(fileClassPath);
		if(StringUtils.isNotEmpty(fileString)) {
			result=JSON.parseArray(fileString, cless);
		}
		return result;
	}
}
